2a0fef63884f6bd58349bfd1e3a417b9f720f3e5,plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/CloseReviewsDecorator.java,CloseReviewsDecorator,closeReviewsForDeletedResources,#number#number#,144

Before Change


   * Close reviews that relate to resources that have been deleted or renamed.
   */
  protected int closeReviewsForDeletedResources(int projectId, int projectSnapshotId) {
    String conditions = " WHERE status!='CLOSED' AND project_id=" + projectId
      + " AND resource_id IN ( SELECT prev.project_id FROM snapshots prev  WHERE prev.root_project_id=" + projectId
      + " AND prev.islast=? AND NOT EXISTS ( SELECT cur.id FROM snapshots cur WHERE cur.root_snapshot_id=" + projectSnapshotId
      + " AND cur.created_at > prev.created_at AND cur.root_project_id=" + projectId + " AND cur.project_id=prev.project_id ) )";
    List<Review> reviews = databaseSession.getEntityManager().createNativeQuery("SELECT * FROM reviews " + conditions, Review.class)
      .setParameter(1, Boolean.TRUE)
      .getResultList();
    for (Review review : reviews) {
      notifyClosed(null, review);
    }
    int rowUpdated = databaseSession.createNativeQuery("UPDATE reviews SET status='CLOSED', updated_at=CURRENT_TIMESTAMP" + conditions)
      .setParameter(1, Boolean.TRUE)
      .executeUpdate();
    LOG.debug("- {} reviews set to 'closed' on project #{}", rowUpdated, projectSnapshotId);
    return rowUpdated;

After Change


   */
  @SuppressWarnings("unchecked")
  protected int closeReviewsForDeletedResources(int projectId, int projectSnapshotId) {
    String conditions = " WHERE status!='CLOSED' AND project_id=:" + PROJECT_ID
      + " AND resource_id IN ( SELECT prev.project_id FROM snapshots prev  WHERE prev.root_project_id=:" + PROJECT_ID 
      + " AND prev.islast=:" + IS_LAST + " AND NOT EXISTS ( SELECT cur.id FROM snapshots cur WHERE cur.root_snapshot_id=:" + PROJECT_SNAPSHOT_ID
      + " AND cur.created_at > prev.created_at AND cur.root_project_id=:" + PROJECT_ID + " AND cur.project_id=prev.project_id ) )";
    List<Review> reviews = databaseSession.getEntityManager().createNativeQuery("SELECT * FROM reviews " + conditions, Review.class)
      .setParameter(PROJECT_ID, projectId)
      .setParameter(PROJECT_SNAPSHOT_ID, projectSnapshotId)
      .setParameter(IS_LAST, Boolean.TRUE)
      .getResultList();
    for (Review review : reviews) {
      notifyClosed(null, review);
    }
    int rowUpdated = databaseSession.createNativeQuery("UPDATE reviews SET status='CLOSED', updated_at=CURRENT_TIMESTAMP" + conditions)
      .setParameter(PROJECT_ID, projectId)
      .setParameter(PROJECT_SNAPSHOT_ID, projectSnapshotId)
      .setParameter(IS_LAST, Boolean.TRUE)
      .executeUpdate();
    LOG.debug("- {} reviews set to 'closed' on project #{}", rowUpdated, projectSnapshotId);